/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package estados.Thread;

import Arquivos.GerenciarArquivos;
import Interface.TelaAquisicao;
import Principal.comandosUSB;
import java.awt.TextArea;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jfree.data.time.Day;
import org.jfree.data.time.Hour;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.Minute;
import org.jfree.data.time.Second;

/**
 *
 * @author linton
 */
public class Conversao implements Runnable {
comandosUSB comandos;
TelaAquisicao tela;
TextArea textArea1;
        public Conversao(comandosUSB comandos) {
        this.comandos = comandos;

    }

    public Conversao(TelaAquisicao telas, TextArea text) {
    tela=telas;
    textArea1=text;
    }


    public void run() {
        double conversao=0;
        double i=0;
        GerenciarArquivos arquivos = new GerenciarArquivos();

//        while (new Hour().getHour()!=6){
//            try {
//                Thread.sleep(1000);
//            } catch (InterruptedException ex) {
//                Logger.getLogger(Conversao.class.getName()).log(Level.SEVERE, null, ex);
//            }
//        }
int minutoAtual;
minutoAtual=new Minute().getMinute();
        while(tela.estados.isConectado()){
            
            while(new Minute().getMinute()==minutoAtual){
//            try {
//                Thread.sleep(29892);
//            } catch (InterruptedException ex) {
//                Logger.getLogger(Conversao.class.getName()).log(Level.SEVERE, null, ex);
//            }
            }
            minutoAtual=new Minute().getMinute();
            

            conversao=tela.estados.converter();
            
            String resultado = String.valueOf(conversao);
           
            

            tela.grafico.getTimeSerie().addOrUpdate(new Millisecond((int) new Millisecond().getMillisecond(),
                                            new Second(new Second().getSecond(), new Minute(new Minute().getMinute(),
                                            new Hour(new Hour().getHour(), new Day())))), conversao);
            String texto1= resultado;
            String texto2= " \t"+new Hour().getHour()+":"+String.valueOf(new Minute().getMinute())+":"+String.valueOf(new Second().getSecond());
            String texto=texto1.concat(texto2);    
            textArea1.append("\n"+texto1);
            textArea1.append(texto2);
            
            arquivos.gravar(texto);
            i++;
        }
        if (!tela.estados.isConectado())
            textArea1.append("\nDispositivo não está conectado");
        else
            textArea1.append("\ntotal de erros para "+i+" conversões: "+(int)tela.estados.getErrosCont()+"\nPorcentagem de erros: "+tela.estados.getErrosCont()*100/i+"%");
            tela.estados.setErrosCont(0);

            System.out.println(i);
        
    }



    public double converter(int x) {
        double resultado=0;

        for (int i = 0; i < x; i++) {

        byte[] bufferSaida = new byte[64];
        byte[] bufferEntrada = new byte[64];
        bufferSaida[0] = (byte) 130;
        comandos.enviar(bufferSaida);
        bufferEntrada = comandos.receber();

        
        try {//transforma o buffer de bytes para um numero inteiro
            resultado=(bufferEntrada[4] << 24)
                + ((bufferEntrada[3] & 0xFF) << 16)
                + ((bufferEntrada[2] & 0xFF) << 8)
                + (bufferEntrada[1] & 0xFF);
        } catch (Exception e) {
            System.out.println("Erro");
        }
        System.out.println(resultado);
        resultado = resultado/13080;
        }
        return resultado;
    }

    public void atualizaGrafico(TelaAquisicao tela){
         double conversao=0;
        double i=0;
        while(tela.estados.isConectado() && i<10){
            try {
                Thread.sleep(100);
            } catch (InterruptedException ex) {
                Logger.getLogger(Conversao.class.getName()).log(Level.SEVERE, null, ex);
            }

            conversao=tela.estados.converter();
            String resultado = String.valueOf(conversao);
            //tela.textArea1.insert("\n" + resultado, textArea1.getSelectionStart());

            tela.grafico.getTimeSerie().addOrUpdate(new Millisecond((int) new Millisecond().getMillisecond(),
                                            new Second(new Second().getSecond(), new Minute(new Minute().getMinute(),
                                            new Hour(new Hour().getHour(), new Day())))), conversao);
            i++;
       
        }

    }
}
